package cn.stylefeng.guns.modular.car.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author: 邢朋辉
 * @Date: 2023/3/14 14:09
 */
public class AliOssUtil {
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    public static final String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
//    public static final String accessKeyId = "LTAI5tM1kdcVRgR73UjpETxM";
    public static final String accessKeyId = "LTAI5tJmyUexXVFuehDMo1Ko";
    //    public static final String accessKeySecret = "mYxdY9kC5XCXCi2CTOp6qpU4nfuh8v";
    public static final String accessKeySecret = "Q6VcAWaQG6QOqYemhk1rkCzp5fYUSw";
    public static OSS client;

    public static String path = "picture/";

    static {
        client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 创建存储空间
     *
     * @param name 存储空间的名称
     */
    public static void createBucket(String name) {
        Bucket bucket = client.createBucket(name);
    }

    /**
     * 上传文件
     */
    public static void upload(String objname, InputStream data) {

//        client.putObject("javadata168", objname, data);
        client.putObject("xiaobanzhu", path + objname, data);
    }

    /**
     * 上传文件
     *
     * @param objname 对象名，文件名 要求唯一
     * @param data    上传的内容，字节数组的形式
     */
    public static void upload(String objname, byte[] data) {
        upload(objname, new ByteArrayInputStream(data));

    }

    /**
     * 获取访问名称
     *
     * @param objname 对象名
     * @param year    访问链接的有效器
     */
    public static String getPath(String objname, int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, year);
//        return client.generatePresignedUrl("javadata168", objname, calendar.getTime()).toString();
        return client.generatePresignedUrl("xiaobanzhu", path+objname, calendar.getTime()).toString();
    }

    /**
     * 获取存储空间中的对象名
     */
    public static List<String> getFileList() {
//        ObjectListing listing = client.listObjects("javadata168");
        ObjectListing listing = client.listObjects("xiaobanzhu");
        List<String> names = new ArrayList<>();
        for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
            names.add(objectSummary.getKey());
        }
        return names;
    }

    /**
     * 删除文件
     *
     * @param objname 对象名
     */
    public static void delFile(String objname) {

//        client.deleteObject("javadata168", objname);
        client.deleteObject("xiaobanzhu", path+objname);
    }

}
